package model.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "PLANO_TRATAMENTO", schema = "public")
@SequenceGenerator(name = "SEQ_PLTT")
public class PlanoTratamento extends AbstractPersistableEntity{

	private int id;

	private Date dataInicio;
	
	private double valorTotal;
	
	private double valorPago;
	
	private Paciente paciente;
	
	private List<Procedimento> procedimentos;
			
	private TipoPagamento tipoPagamento;
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PLTT")
	@Column(name = "COD_PLTT", nullable = false)
	protected int getId() {
		return id;
	}
	
	protected void setId(int id) {
		this.id = id;
	}

	@Column(name = "DATA_INICIO", nullable = false)
	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	@Column(name = "VALOR_TOTAL", nullable = false)
	public double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(double valorTotal) {
		this.valorTotal = valorTotal;
	}

	@ManyToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinTable(name="ASSOC_PLTT_PROC",
        joinColumns = @JoinColumn(name="COD_PLTT"),
        inverseJoinColumns = @JoinColumn(name="COD_PROC"))
	public List<Procedimento> getProcedimentos() {
		return procedimentos;
	}

	public void setProcedimentos(List<Procedimento> procedimentos) {
		this.procedimentos = procedimentos;
	}
	
	@OneToOne
	@JoinColumn(name = "COD_PACIENTE", nullable = false)
	public Paciente getPaciente(){
		return paciente;
	}

	public void setTiposPagamento(TipoPagamento tipoPagamento) {
		this.setTipoPagamento(tipoPagamento);
	}
	
	@OneToOne
	@JoinColumn(name="COD_TPPG", nullable=false)
	public TipoPagamento getTipoPagamento() {
		return tipoPagamento;
	}

	public void setTipoPagamento(TipoPagamento tipoPagamento) {
		this.tipoPagamento = tipoPagamento;
	}

	/**
	 * @param paciente the paciente to set
	 */
	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}
	
	@Column(name = "VALOR_PAGO", nullable = false)
	public double getValorPago() {
		return valorPago;
	}

	public void setValorPago(double valorPago) {
		this.valorPago = valorPago;
	}
	
	@Override
	public String toString() {
		return (paciente.getNome() + dataInicio.toString());
	}
}
